home *** CD-ROM | disk | FTP | other *** search
/ NetNews Offline 2 / NetNews Offline Volume 2.iso / news / comp / lang / c-part1 / 9017 < prev    next >
Encoding:
Text File  |  1996-08-05  |  2.1 KB  |  79 lines

  1. Path: news.umbc.edu!not-for-mail
  2. From: schlein@umbc.edu (Jonas J. Schlein)
  3. Newsgroups: comp.lang.c
  4. Subject: Re: Why doesn't this work?
  5. Date: 7 Mar 1996 18:07:10 -0500
  6. Organization: University of Maryland Baltimore County
  7. Message-ID: <4hnq6u$2t3@umbc9.umbc.edu>
  8. References: <1996Mar4.161412.137442@forest>
  9. NNTP-Posting-Host: umbc9.umbc.edu
  10. NNTP-Posting-User: schlein
  11.  
  12. ebromber@forest.drew.edu> wrote:
  13. |> Does anyone know why this password program doesn't work properly? And if 
  14. |> you do know the problem how can I fix it? It rejects every password
  15. |> including the real password. The program was compiled using a MS-DOS
  16. |> compiler. Thanks in advance.
  17. |>
  18. |> main();
  19.  
  20. Personally I use 'int main (void)' to be explicit, but the semi-colon is
  21. just plain wrong.
  22.  
  23. |> {    char real[4];
  24. |>     char pass[100];
  25. |>     int count=0;
  26. |>     int i, error;
  27. |>     char c;
  28.  
  29. This variable should really be an int to comply with getchar().
  30.  
  31. |>     real[0]='j';real[1]='e';real[2]='r';real[3]='k';
  32. |>     printf("PASSWORD: ");
  33.  
  34. It's customary to #include <stdio.h> when using printf().
  35.  
  36. |>     fflush(stdout);
  37.  
  38. Same thing with fflush() and stdout!
  39.  
  40. |>     while (c=getch() !='\n')
  41.  
  42. There is no function getch() in ANSI C. Perhaps you mean getchar()?
  43. In which case you also should have an extra pair of ()'s like so:
  44.  
  45. while ((c = getchar()) != '\n')
  46.  
  47. |>     {     count++;
  48.  
  49. Either move count to the bottom of the loop or start it at -1.
  50.  
  51. |>         pass[count]=c;
  52. |>         putch('*');
  53.  
  54. There is no function putch() in ANSI C. Perhaps you mean putchar()?
  55.  
  56. |>     }
  57. |>     if (count!=4) { printf("\nWRONG PASSWORD\n"); main();}
  58. |>     error=0;
  59. |>     for (i=0; i<4; i++)
  60. |>         if (real[i]=pass[i]) error++;
  61.  
  62. You realize of course you should be testing inequality. And even if you
  63. do want to text equality the = operator is not it. That is for assignment!
  64. In other words your test will always be true unless assigning the
  65. value 0. I'd change it to:
  66.  
  67. if (real[i] != pass[i])
  68.  
  69. |>     if (error>0) {printf("\nWRONG PASSWORD\n"); main();}
  70.  
  71. And we can't forget 'return (0);'. Even if you don't explicitly declare
  72. main()'s return type it's still int.
  73.  
  74. |> }
  75. -- 
  76. "If it wasn't for C, we would be using BASI, PASAL, and OBOL."
  77.  
  78. Jonas J. Schlein  (schlein@gl.umbc.edu)
  79.